home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / db / RCS / Db_WriteEntry.c,v < prev    next >
Text File  |  1989-06-16  |  5KB  |  232 lines

  1. head     1.5;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.5
  10. date     89.06.15.22.45.33;  author douglis;  state Exp;
  11. branches ;
  12. next     1.4;
  13.  
  14. 1.4
  15. date     89.01.13.11.44.35;  author douglis;  state Exp;
  16. branches ;
  17. next     1.3;
  18.  
  19. 1.3
  20. date     88.09.22.22.12.15;  author douglis;  state Exp;
  21. branches ;
  22. next     1.2;
  23.  
  24. 1.2
  25. date     88.09.13.16.49.39;  author douglis;  state Exp;
  26. branches ;
  27. next     1.1;
  28.  
  29. 1.1
  30. date     88.08.14.15.09.14;  author douglis;  state Exp;
  31. branches ;
  32. next     ;
  33.  
  34.  
  35. desc
  36. @Procedure to open and lock a database file, write a record, and close it
  37. again.
  38. @
  39.  
  40.  
  41. 1.5
  42. log
  43. @create database file if not already there
  44. @
  45. text
  46. @/* 
  47.  * Db_WriteEntry.c --
  48.  *
  49.  *    Source code for the Db_WriteEntry procedure.
  50.  *
  51.  * Copyright 1988 Regents of the University of California
  52.  * Permission to use, copy, modify, and distribute this
  53.  * software and its documentation for any purpose and without
  54.  * fee is hereby granted, provided that the above copyright
  55.  * notice appear in all copies.  The University of California
  56.  * makes no representations about the suitability of this
  57.  * software for any purpose.  It is provided "as is" without
  58.  * express or implied warranty.
  59.  */
  60.  
  61. #ifndef lint
  62. static char rcsid[] = "$Header: /sprite/src/lib/c/db/RCS/Db_WriteEntry.c,v 1.4 89/01/13 11:44:35 douglis Exp Locker: douglis $ SPRITE (Berkeley)";
  63. #endif not lint
  64.  
  65.  
  66. #include <db.h>
  67. #include "dbInt.h"
  68.  
  69.  
  70. /*
  71.  *----------------------------------------------------------------------
  72.  *
  73.  * Db_WriteEntry --
  74.  *
  75.  *    Write a buffer into a specified location in the shared database.
  76.  *    This opens and locks the file, writes the data, and closes the
  77.  *    file.  The lock is polled if necessary.  The file is opened with
  78.  *    the default mode as defined above.  
  79.  *
  80.  * Results:
  81.  *    -1 indicates an error, in which case errno indicates more details.
  82.  *    0 indicates success.
  83.  *
  84.  * Side effects:
  85.  *    The global database is modified.
  86.  *
  87.  *----------------------------------------------------------------------
  88.  */
  89.  
  90. int
  91. Db_WriteEntry(file, buffer, index, size, lockHow)
  92.     char *file;
  93.     char *buffer;
  94.     int index;
  95.     int size;
  96.     Db_LockHow lockHow;
  97. {
  98.     int status;
  99.     int offset;
  100.     int streamID;
  101.     int bytesWritten;
  102.     Db_Handle handle;
  103.     
  104. #ifdef DEBUG_DB
  105.     syslog(LOG_INFO, "Debug msg: Db_WriteEntry(%s) called.", file);
  106. #endif    
  107.     streamID = open(file, O_WRONLY | O_CREAT, FILE_MODE);
  108.     if (streamID == -1) {
  109.     syslog(LOG_ERR, "Db_WriteEntry: error opening file %s: %s.\n", file,
  110.            strerror(errno));
  111.     return(streamID);
  112.     }
  113.  
  114.     offset = index * size;
  115.     status = lseek(streamID, (long) offset, L_SET);
  116.     if (status == -1) {
  117.     return(status);
  118.     }
  119.     /*
  120.      * Fake a Db_Handle for DbLockDesc.
  121.      */
  122.     handle.streamID = streamID;
  123.     handle.lockHow = lockHow;
  124.     handle.lockType = LOCK_EX;
  125. #ifndef CLEAN
  126.     handle.fileName = file;
  127. #endif /* CLEAN */
  128.     status = DbLockDesc(&handle);
  129.     if (status == -1) {
  130. #ifdef DEBUG_DB
  131.     syslog(LOG_INFO, "Debug msg: Db_WriteEntry(%s) returning %x.", file, status);
  132. #endif    
  133.     return(status);
  134.     }
  135.     
  136.     bytesWritten = write(streamID, buffer, size);
  137.     if (bytesWritten == -1) {
  138.     status = -1;
  139.     } else if (bytesWritten != size) {
  140.     status = -1;
  141.     errno = 0;
  142.     } else {
  143.     status = 0;
  144.     }
  145.     (void) flock(streamID, LOCK_EX | LOCK_UN);
  146.     (void) close(streamID);
  147.  
  148. #ifdef DEBUG_DB
  149.     syslog(LOG_INFO, "Debug msg: Db_WriteEntry(%s) returning %x.", file, status);
  150. #endif    
  151.     return(status);
  152. }
  153. @
  154.  
  155.  
  156. 1.4
  157. log
  158. @changed for buffering and for new arg passing to lock routine.
  159. [generic checkin msg].
  160. @
  161. text
  162. @d17 1
  163. a17 1
  164. static char rcsid[] = "$Header: /sprite/src/lib/c/db/RCS/Db_WriteEntry.c,v 1.3 88/09/22 22:12:15 douglis Exp Locker: douglis $ SPRITE (Berkeley)";
  165. d59 4
  166. a62 1
  167.     streamID = open(file, O_WRONLY, FILE_MODE);
  168. d64 2
  169. d85 3
  170. d103 3
  171. @
  172.  
  173.  
  174. 1.3
  175. log
  176. @Changed some arg. orders, var. names, and Db_LockDesc to DbLockDesc.
  177. @
  178. text
  179. @d17 1
  180. a17 1
  181. static char rcsid[] = "$Header: Db_WriteEntry.c,v 1.2 88/09/13 16:49:39 douglis Exp $ SPRITE (Berkeley)";
  182. d57 1
  183. d69 10
  184. a78 1
  185.     status = DbLockDesc(streamID, LOCK_EX, lockHow);
  186. @
  187.  
  188.  
  189. 1.2
  190. log
  191. @fixed some lint.
  192. @
  193. text
  194. @d17 1
  195. a17 1
  196. static char rcsid[] = "$Header: Db_WriteEntry.c,v 1.1 88/08/14 15:09:14 douglis Exp $ SPRITE (Berkeley)";
  197. d46 1
  198. a46 1
  199. Db_WriteEntry(file, index, bufSize, buf, lockHow)
  200. d48 1
  201. d50 1
  202. a50 2
  203.     int bufSize;
  204.     char *buf;
  205. d63 1
  206. a63 1
  207.     offset = index * bufSize;
  208. d68 1
  209. a68 1
  210.     status = Db_LockDesc(streamID, LOCK_EX, lockHow);
  211. d73 1
  212. a73 1
  213.     bytesWritten = write(streamID, buf, bufSize);
  214. d76 1
  215. a76 1
  216.     } else if (bytesWritten != bufSize) {
  217. @
  218.  
  219.  
  220. 1.1
  221. log
  222. @Initial revision
  223. @
  224. text
  225. @d17 1
  226. a17 1
  227. static char rcsid[] = "$Header: proto.c,v 1.2 88/03/11 08:39:08 ouster Exp $ SPRITE (Berkeley)";
  228. d64 1
  229. a64 1
  230.     status = lseek(streamID, offset, L_SET);
  231. @
  232.